#include <stdio.h> 
#include <omp.h>

void socket_init(int socket_num)
{
    int n_procs;

    // 直接设置插槽的处理器数量
    n_procs = omp_get_num_procs(); // 获取系统上的总处理器数

    #pragma omp parallel num_threads(n_procs) proc_bind(close)
    {
        printf("Reporting in from socket num %d, thread num %d\n", socket_num, omp_get_thread_num());
    }
}

int main()
{
    int n_sockets = 1, socket_num;

    omp_set_nested(1); // 启用嵌套并行
    omp_set_max_active_levels(2); // 设置最大活动层级为 2

    // 显式设置插槽数为 1，因为系统只有一个插槽
    n_sockets = 1;

    // 输出可用的插槽数量
    printf("Number of available sockets: %d\n", n_sockets);

    #pragma omp parallel num_threads(n_sockets) private(socket_num) proc_bind(spread)
    {
        socket_num = 0; // 直接设置为插槽 0，因为系统只有一个插槽
        printf("Thread %d is on socket %d\n", omp_get_thread_num(), socket_num);
        socket_init(socket_num); // 初始化插槽
    }

    return 0;
}
